/*-*
 * FILENAME  :
 *    $HeadURL$
 *
 * STATUS  :
 *    $Revision$
 *
 *    $Author$
 *    $Date$
 *  
 *    
 * Copyright (c) 2011 Gonalge Ltda. All rights reserved.
 *
 ****************************************************************/

package org.gonalge.rompecabeza.util;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import org.apache.commons.lang.StringUtils;
import org.gonalge.rompecabeza.dto.Conexion;

/**
 * 
 * @author Geremias Gonzalez
 */
public class FormConexion extends JDialog implements ActionListener {

    /**
     * 
     */
    private static final long serialVersionUID = 7890941900510532879L;

    private boolean conectar = false;

    private final Conexion conexion;

    private final JButton lanzarButton = new JButton("Iniciar Servicio");

    private final JButton terminarButton = new JButton("S A L I R");

    private final JTextField usuarioText = new JTextField();

    private final JTextField puertoText = new JTextField();

    private final JTextField servidorText = new JTextField();

    private final JLabel usuarioLabel = new JLabel(" Usuario");

    private final JLabel puertoLabel = new JLabel(" Puerto");

    private final JLabel servidorLabel = new JLabel(" Servidor");

    private final JPanel panel1 = new JPanel(new GridLayout(2, 2));

    private final JPanel panel2 = new JPanel();

    private final boolean cliente;

    public FormConexion(boolean cliente, Conexion conexion) {
        this(null, "", true, cliente, conexion);
    }

    public FormConexion(Frame parent, String title, boolean modal, boolean cliente, Conexion conexion) {
        super(parent, title, modal);
        this.conexion = conexion;
        this.cliente = cliente;
        this.setTitle("Configuración '" + conexion.getNombreJuego() + "'");

        if (cliente) {
            panel1.setLayout(new GridLayout(3, 3));
            this.setBounds(FormUtils.centarRectangle(280, 150));
        } else {
            this.setBounds(FormUtils.centarRectangle(280, 120));
        }

        lanzarButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        terminarButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        usuarioText.setText(conexion.getUsuario());
        puertoText.setText("" + conexion.getPuerto());
        servidorText.setText(conexion.getServidor());

        addObjetos(cliente);
        addEventos();
        setResizable(false);
        setVisible(true);
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                setVisible(false);
            }
        });
    }

    /******************** OTROS METODOS *********************/
    private void addObjetos(boolean cliente) {

        if (cliente) {
            this.panel1.add(usuarioLabel);
            this.panel1.add(usuarioText);
        }
        this.panel1.add(servidorLabel);
        this.panel1.add(servidorText);
        this.panel1.add(puertoLabel);
        this.panel1.add(puertoText);
        this.panel2.add(lanzarButton);
        this.panel2.add(terminarButton);

        this.getContentPane().add(panel1, BorderLayout.CENTER);
        this.getContentPane().add(panel2, BorderLayout.SOUTH);

    }

    private void addEventos() {
        lanzarButton.addActionListener(this);
        terminarButton.addActionListener(this);
    }

    /*****************************************************/
    @Override
    public void actionPerformed(ActionEvent e) {

        if (e.getSource().equals(lanzarButton)) {
            if (cliente) {
                if (StringUtils.isBlank(usuarioText.getText())) {
                    JOptionPane.showMessageDialog(new JFrame(), "El nombre del Usuario no es Válido", "Advertencia!!", 2);
                    return;
                } else
                    conexion.setUsuario(usuarioText.getText());
            }

            if (StringUtils.isBlank(servidorText.getText())) {
                JOptionPane.showMessageDialog(new JFrame(), "El nombre del Servidor no es Válido", "Advertencia!!", 2);
                return;
            } else
                conexion.setServidor(servidorText.getText());

            if (!ValidarDatos.puertoValido(puertoText.getText())) {
                JOptionPane.showMessageDialog(new JFrame(), "El Puerto no es Válido", "Advertencia!!", 2);
                return;
            } else
                conexion.setPuerto(Integer.parseInt(puertoText.getText()));
            conectar = true;
        } else
            conectar = false;

        setVisible(false);
    }

    public boolean isConectar() {
        return conectar;
    }
}
